



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#FFF">
  <link rel="apple-touch-icon" sizes="180x180" href="/lostyu/images/apple-touch-icon.png">

<link rel="icon" type="image/ico" sizes="32x32" href="/lostyu/images/favicon.ico">
  <meta http-equiv="Cache-Control" content="no-transform">
  <meta http-equiv="Cache-Control" content="no-siteapp">


<link rel="alternate" type="application/rss+xml" title="Eden" href="https://luhongdeng.gitee.io/rss.xml" />
<link rel="alternate" type="application/atom+xml" title="Eden" href="https://luhongdeng.gitee.io/atom.xml" />
<link rel="alternate" type="application/json" title="Eden" href="https://luhongdeng.gitee.io/feed.json" />

<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Mulish:300,300italic,400,400italic,700,700italic%7CFredericka%20the%20Great:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20JP:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20SC:300,300italic,400,400italic,700,700italic%7CInconsolata:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext">

<link rel="stylesheet" href="/lostyu/css/app.css?v=0.2.5">

  

<link rel="canonical" href="https://luhongdeng.gitee.io/2020/12/23/dubbo/">



  <title>
dubbo |
我的金子，只给千寻 = Eden</title>
<meta name="generator" content="Hexo 5.3.0"></head>
<body itemscope itemtype="http://schema.org/WebPage">
  <div id="loading">
    <div class="cat">
      <div class="body"></div>
      <div class="head">
        <div class="face"></div>
      </div>
      <div class="foot">
        <div class="tummy-end"></div>
        <div class="bottom"></div>
        <div class="legs left"></div>
        <div class="legs right"></div>
      </div>
      <div class="paw">
        <div class="hands left"></div>
        <div class="hands right"></div>
      </div>
    </div>
  </div>
  <div id="container">
    <header id="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="inner">
        <div id="brand">
          <div class="pjax">
          
  <h1 itemprop="name headline">dubbo
  </h1>
  
<div class="meta">
  <span class="item" title="Created: 2020-12-23 22:46:37">
    <span class="icon">
      <i class="ic i-calendar"></i>
    </span>
    <span class="text">Posted on</span>
    <time itemprop="dateCreated datePublished" datetime="2020-12-23T22:46:37+08:00">2020-12-23</time>
  </span>
</div>


          </div>
        </div>
        <nav id="nav">
  <div class="inner">
    <div class="toggle">
      <div class="lines" aria-label="Toggle navigation bar">
        <span class="line"></span>
        <span class="line"></span>
        <span class="line"></span>
      </div>
    </div>
    <ul class="menu">
      <li class="item title"><a href="/lostyu/" rel="start">我的金子，只给千寻</a></li>
    </ul>
    <ul class="right">
      <li class="item theme">
        <i class="ic i-sun"></i>
      </li>
      <li class="item search">
        <i class="ic i-search"></i>
      </li>
    </ul>
  </div>
</nav>

      </div>
      <div id="imgs" class="pjax">
        <ul>
          <li class="item" data-background-image="https://tva4.sinaimg.cn/large/6833939bly1giclhnx9glj20zk0m8npd.jpg"></li>
          <li class="item" data-background-image="https://tva4.sinaimg.cn/large/6833939bly1giciusoyjnj219g0u0x56.jpg"></li>
          <li class="item" data-background-image="https://tva4.sinaimg.cn/large/6833939bly1giciub8ja1j20zk0m81ky.jpg"></li>
          <li class="item" data-background-image="https://tva4.sinaimg.cn/large/6833939bly1gipexj2jgzj20zk0m8b09.jpg"></li>
          <li class="item" data-background-image="https://tva4.sinaimg.cn/large/6833939bly1gipeuv80yoj20zk0m8kjl.jpg"></li>
          <li class="item" data-background-image="https://tva4.sinaimg.cn/large/6833939bly1gicliierfjj20zk0m8npd.jpg"></li>
        </ul>
      </div>
    </header>
    <div id="waves">
      <svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
        <defs>
          <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" />
        </defs>
        <g class="parallax">
          <use xlink:href="#gentle-wave" x="48" y="0" />
          <use xlink:href="#gentle-wave" x="48" y="3" />
          <use xlink:href="#gentle-wave" x="48" y="5" />
          <use xlink:href="#gentle-wave" x="48" y="7" />
        </g>
      </svg>
    </div>
    <main>
      <div class="inner">
        <div id="main" class="pjax">
          
  <div class="article wrap">
    
<div class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">
<i class="ic i-home"></i>
<span><a href="/lostyu/">Home</a></span>
</div>

    <article itemscope itemtype="http://schema.org/Article" class="post block" lang="en">
  <link itemprop="mainEntityOfPage" href="https://luhongdeng.gitee.io/2020/12/23/dubbo/">

  <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
    <meta itemprop="image" content="/lostyu/images/avatar.jpg">
    <meta itemprop="name" content="Eden的个人世界">
    <meta itemprop="description" content=", ">
  </span>

  <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
    <meta itemprop="name" content="Eden">
  </span>

  <div class="body md" itemprop="articleBody">
    

    <p>Dubbo (读音 [ˈdʌbəʊ]) 是阿里巴巴公司开源的一个高性能优秀的<span class="exturl" data-url="aHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS8lRTYlOUMlOEQlRTUlOEElQTElRTYlQTElODYlRTYlOUUlQjY=">服务框架</span>，使得应用可通过高性能的 RPC 实现服务的输出和输入功能，可以和 [1] <span class="exturl" data-url="aHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS9TcHJpbmc=">Spring</span> 框架无缝集成。</p>
<p>Dubbo 是一款高性能、轻量级的开源 Java RPC 框架，它提供了三大核心能力：面向接口的远程方法调用，智能容错和负载均衡，以及服务自动注册和发现。</p>
<h2 id="什么是dubbo"><a class="markdownIt-Anchor" href="#什么是dubbo">#</a> 什么是 dubbo</h2>
<ul>
<li>
<p>开源分布式服务框架</p>
</li>
<li>
<p>微服务生态中的重要组件</p>
</li>
<li>
<p>高性能、轻量级的开源 Java RPC 框架</p>
</li>
<li>
<p>具有面向接口的远程方法调用，智能容错和负载均衡，以及服务自动注册和发现能力</p>
<ol>
<li>
<p>分布式系统</p>
<p>分布式系统（distributed system）是建立在网络之上的软件系统。正是因为软件的特性，所以分布式系统具有高度的内聚性和透明性。因此，网络和分布式系统之间的区别更多的在于高层软件（特别是操作系统），而不是硬件。</p>
<p><img data-src="image-20201202005354520.png" alt="image-20201202005354520"></p>
</li>
<li>
<p>架构的发展历史</p>
<p><img data-src="image-20201201235840015.png" alt="image-20201201235840015"></p>
</li>
<li>
<p>RPC 介绍</p>
<p>RPC【Remote Procedure Call】是指远程过程调用，是一种进程间通信方式，他是一种技术的思想，而不是规范。它允许程序调用另一个地址空间（通常是共享网络的另一台机器上）的过程或函数，而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数，本质上编写的调用代码基本相同</p>
<ul>
<li>
<p>RPC  指远程过程调用</p>
</li>
<li>
<p>调用其他机器上的程序和调用本地的程序一样方便</p>
</li>
<li>
<p>传输效率</p>
</li>
<li>
<p>性能消耗</p>
</li>
<li>
<p>负载均衡</p>
</li>
</ul>
<p><img data-src="image-20201202001425293.png" alt="image-20201202001425293"></p>
<p>一次完整的 RPC 调用流程如下：</p>
<blockquote>
<ol>
<li>消费者 client 调用以本地调用方式调用服务；</li>
</ol>
</blockquote>
</li>
</ol>
<blockquote>
<ol start="2">
<li>client stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体；</li>
<li>client stub 找到服务地址，并将消息发送到服务端；</li>
</ol>
<p>4）server stub 收到消息后进行解码；</p>
<p>5）server stub 根据解码结果调用本地的服务；</p>
<p>6）提供者 server 执行并将结果返回给 server stub；</p>
<p>7）server stub 将返回结果打包成消息并发送至消费方；</p>
<p>8）client stub 接收到消息，并进行解码；</p>
<p>9）服务消费方得到最终结果</p>
</blockquote>
<ol start="4">
<li>
<p>RPC netty 通信原理</p>
<ul>
<li>netty 基于 NIO 的多路复用模型来实现</li>
</ul>
<blockquote>
<ol>
<li>Connect</li>
<li>Accept</li>
<li>Read</li>
<li>Write</li>
</ol>
</blockquote>
<p><img data-src="image-20201202221418213.png" alt="image-20201202221418213"></p>
</li>
</ol>
</li>
</ul>
<h2 id="dubbo工作原理"><a class="markdownIt-Anchor" href="#dubbo工作原理">#</a> Dubbo 工作原理</h2>
<ol>
<li>
<p>基本概念</p>
<p><img data-src="image-20201202225415858.png" alt="image-20201202225415858"></p>
<p>调用关系说明</p>
<ul>
<li>
<p>服务容器负责启动，加载，运行服务提供者。</p>
</li>
<li>
<p>服务提供者在启动时，向注册中心注册自己提供的服务。</p>
</li>
<li>
<p>服务消费者在启动时，向注册中心订阅自己所需的服务。</p>
</li>
<li>
<p>注册中心返回服务提供者地址列表给消费者，如果有变更，注册中心将基于长连接推送变更数据给消费者。</p>
</li>
<li>
<p>服务消费者，从提供者地址列表中，基于软负载均衡算法，选一台提供者进行调用，如果调用失败，再选另一台调用。</p>
</li>
<li>
<p>服务消费者和提供者，在内存中累计调用次数和调用时间，定时每分钟发送一次统计数据到监控中心。</p>
</li>
</ul>
</li>
<li>
<p>dubbo 的注册中心和监控中心工具</p>
<p>启动 zookper、dubbo-admin、dubbo-monitor-simple</p>
</li>
<li>
<p>dubbo 改造</p>
<ul>
<li>
<p>提供者</p>
<blockquote>
<ol>
<li>指定当前服务 / 应用的名字</li>
<li>指定注册中心的位置</li>
<li>指定通信规则</li>
<li>连接监控中心</li>
<li>声明需要暴露的服务接口</li>
<li>服务的具体实现</li>
</ol>
</blockquote>
</li>
<li>
<p>消费者</p>
<blockquote>
<ol>
<li>指定当前服务 / 应用的名字</li>
<li>指定注册中心的位置</li>
<li>指定通信规则</li>
<li>连接监控中心</li>
<li>链接到当前需要的服务接口</li>
</ol>
</blockquote>
</li>
</ul>
</li>
<li>
<p>dubbo 常用配置</p>
<p><img data-src="image-20201202231836939.png" alt="image-20201202231836939"></p>
<ul>
<li>
<p>retries 重试次数</p>
</li>
<li>
<p>timeout 超时时间</p>
</li>
<li>
<p>version 版本</p>
</li>
</ul>
</li>
<li>
<p>dubbo 高可用配置</p>
<ul>
<li>dubbo 直连</li>
<li>dubbo 负载均衡</li>
<li>dubbo 集群容错</li>
</ul>
</li>
</ol>
<h2 id="dubbo框架设计"><a class="markdownIt-Anchor" href="#dubbo框架设计">#</a> dubbo 框架设计</h2>
<p><img data-src="image-20201202004152826.png" alt="image-20201202004152826"></p>
<ol>
<li>
<p>config 配置层：</p>
<blockquote>
<p>对外配置接口，解析配置文件的信息以 ServiceConfig, ReferenceConfig 为中心，可以直接初始化配置类</p>
</blockquote>
</li>
<li>
<p>proxy 服务代理层：</p>
<blockquote>
<p>服务接口透明代理，生成服务的客户端代理对象和服务器端目标的代理对象，互相的调用方法</p>
</blockquote>
</li>
<li>
<p>registry 注册中心层</p>
<blockquote>
<p>封装服务地址的注册与发现</p>
</blockquote>
</li>
<li>
<p>cluster 路由层</p>
<blockquote>
<p>封装多个提供者的路由及负载均衡，并桥接注册中心，以 Invoker 为中心，扩展接口为 Cluster, Directory, Router, LoadBalance</p>
</blockquote>
</li>
<li>
<p>monitor 监控层</p>
<blockquote>
<p>RPC 调用次数和调用时间监控，可以界面展示，以 Statistics 为中心，扩展接口为 MonitorFactory, Monitor, MonitorService</p>
</blockquote>
</li>
<li>
<p>protocol 远程调用层</p>
<blockquote>
<p>封装 RPC 调用，以 Invocation, Result 为中心，扩展接口为 Protocol, Invoker, Exporter</p>
</blockquote>
</li>
<li>
<p>exchange 信息交换层</p>
<blockquote>
<p>封装请求响应模式，同步转异步，以 Request, Response 为中心，扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer</p>
</blockquote>
</li>
<li>
<p>transport 网络传输层</p>
<blockquote>
<p>抽象 mina 和 netty 为统一接口，以 Message 为中心，扩展接口为 Channel, Transporter, Client, Server, Codec</p>
</blockquote>
</li>
<li>
<p>serialize 数据序列化层</p>
<blockquote>
<p>可复用的一些工具，扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool</p>
</blockquote>
</li>
<li>
<p>config 配置层：</p>
<blockquote>
<p>对外配置接口，以 ServiceConfig, ReferenceConfig 为中心，可以直接初始化配置类，也可以通过 spring 解析配置生成配置类</p>
</blockquote>
</li>
<li>
<p>proxy 服务代理层：</p>
<blockquote>
<p>服务接口透明代理，生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心，扩展接口为 ProxyFactory</p>
</blockquote>
</li>
<li>
<p>registry 注册中心层</p>
<blockquote>
<p>封装服务地址的注册与发现，以服务 URL 为中心，扩展接口为 RegistryFactory, Registry, RegistryService</p>
</blockquote>
</li>
<li>
<p>cluster 路由层</p>
<blockquote>
<p>封装多个提供者的路由及负载均衡，并桥接注册中心，以 Invoker 为中心，扩展接口为 Cluster, Directory, Router, LoadBalance</p>
</blockquote>
</li>
<li>
<p>monitor 监控层</p>
<blockquote>
<p>RPC 调用次数和调用时间监控，以 Statistics 为中心，扩展接口为 MonitorFactory, Monitor, MonitorService</p>
</blockquote>
</li>
<li>
<p>protocol 远程调用层</p>
<blockquote>
<p>封装 RPC 调用，以 Invocation, Result 为中心，扩展接口为 Protocol, Invoker, Exporter</p>
</blockquote>
</li>
<li>
<p>exchange 信息交换层</p>
<blockquote>
<p>封装请求响应模式，同步转异步，以 Request, Response 为中心，扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer</p>
</blockquote>
</li>
<li>
<p>transport 网络传输层</p>
<blockquote>
<p>抽象 mina 和 netty 为统一接口，以 Message 为中心，扩展接口为 Channel, Transporter, Client, Server, Codec</p>
</blockquote>
</li>
<li>
<p>serialize 数据序列化层</p>
<blockquote>
<p>可复用的一些工具，扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool</p>
</blockquote>
</li>
</ol>

  </div>

   <footer>

    <div class="meta">
  <span class="item">
    <span class="icon">
      <i class="ic i-calendar-check"></i>
    </span>
    <span class="text">Edited on</span>
    <time title="Modified: 2020-12-23 23:26:32" itemprop="dateModified" datetime="2020-12-23T23:26:32+08:00">2020-12-23</time>
  </span>
</div>

      
<div class="reward">
  <button><i class="ic i-heartbeat"></i> Donate</button>
  <p>Give me a cup of [coffee]~(￣▽￣)~*</p>
  <div id="qr">
      
      <div>
        <img data-src="/lostyu/images/wechatpay.png" alt="Eden的个人世界 WeChat Pay">
        <p>WeChat Pay</p>
      </div>
      
      <div>
        <img data-src="/lostyu/images/alipay.png" alt="Eden的个人世界 Alipay">
        <p>Alipay</p>
      </div>
      
      <div>
        <img data-src="/lostyu/images/paypal.png" alt="Eden的个人世界 PayPal">
        <p>PayPal</p>
      </div>
  </div>
</div>

      

<div id="copyright">
<ul>
  <li class="author">
    <strong>Post author:  </strong>Eden的个人世界 <i class="ic i-at"><em>@</em></i>Eden
  </li>
  <li class="link">
    <strong>Post link: </strong>
    <a href="https://luhongdeng.gitee.io/2020/12/23/dubbo/" title="dubbo">https://luhongdeng.gitee.io/2020/12/23/dubbo/</a>
  </li>
  <li class="license">
    <strong>Copyright Notice:  </strong>All articles in this blog are licensed under <span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo"><i class="ic i-creative-commons"><em>(CC)</em></i>BY-NC-SA</span> unless stating additionally.
  </li>
</ul>
</div>

  </footer>

</article>

  </div>
  

<div class="post-nav">
    <div class="item left">
      

  <a href="/lostyu/2020/12/23/zookeeper/" itemprop="url" rel="prev" data-background-image="https:&#x2F;&#x2F;tva4.sinaimg.cn&#x2F;mw690&#x2F;6833939bly1giph4baakhj20zk0m8h5q.jpg" title="zookeeper">
  <span class="type">Previous Post</span>
  <span class="category"><i class="ic i-flag"></i> </span>
  <h3>zookeeper</h3>
  </a>

    </div>
    <div class="item right">
      

  <a href="/lostyu/2020/12/23/io%E6%B5%81%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/" itemprop="url" rel="next" data-background-image="https:&#x2F;&#x2F;tva4.sinaimg.cn&#x2F;mw690&#x2F;6833939bly1giciukx8a7j20zk0m8aio.jpg" title="io流常用操作..o">
  <span class="type">Next Post</span>
  <span class="category"><i class="ic i-flag"></i> </span>
  <h3>io流常用操作..o</h3>
  </a>

    </div>
</div>

  
  <div class="wrap" id="comments"></div>


        </div>
        <div id="sidebar">
          

<div class="inner">

  <div class="panels">
    <div class="inner">
      <div class="contents panel pjax" data-title="Contents">
          <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BB%80%E4%B9%88%E6%98%AFdubbo"><span class="toc-number">1.</span> <span class="toc-text"> 什么是 dubbo</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#dubbo%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86"><span class="toc-number">2.</span> <span class="toc-text"> Dubbo 工作原理</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#dubbo%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1"><span class="toc-number">3.</span> <span class="toc-text"> dubbo 框架设计</span></a></li></ol>
      </div>
      <div class="related panel pjax" data-title="Related">
      </div>
      <div class="overview panel" data-title="Overview">
        <div class="author" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <img class="image" itemprop="image" alt="Eden的个人世界"
      data-src="/lostyu/images/avatar.jpg">
  <p class="name" itemprop="name">Eden的个人世界</p>
  <div class="description" itemprop="description"></div>
</div>

<nav class="state">
    <div class="item posts">
      <a href="/lostyu/archives/">
        <span class="count">5</span>
        <span class="name">posts</span>
      </a>
    </div>
</nav>

<div class="social">
      <span class="exturl item github" data-url="aHR0cHM6Ly9naXRodWIuY29tL3lvdXJuYW1l" title="https:&#x2F;&#x2F;github.com&#x2F;yourname"><i class="ic i-github"></i></span>
      <span class="exturl item twitter" data-url="aHR0cHM6Ly90d2l0dGVyLmNvbS95b3VybmFtZQ==" title="https:&#x2F;&#x2F;twitter.com&#x2F;yourname"><i class="ic i-twitter"></i></span>
      <span class="exturl item zhihu" data-url="aHR0cHM6Ly93d3cuemhpaHUuY29tL3Blb3BsZS95b3VybmFtZQ==" title="https:&#x2F;&#x2F;www.zhihu.com&#x2F;people&#x2F;yourname"><i class="ic i-zhihu"></i></span>
      <span class="exturl item music" data-url="aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvdXNlci9ob21lP2lkPXlvdXJpZA==" title="https:&#x2F;&#x2F;music.163.com&#x2F;#&#x2F;user&#x2F;home?id&#x3D;yourid"><i class="ic i-cloud-music"></i></span>
      <span class="exturl item weibo" data-url="aHR0cHM6Ly93ZWliby5jb20veW91cm5hbWU=" title="https:&#x2F;&#x2F;weibo.com&#x2F;yourname"><i class="ic i-weibo"></i></span>
      <span class="exturl item about" data-url="aHR0cHM6Ly9hYm91dC5tZS95b3VybmFtZQ==" title="https:&#x2F;&#x2F;about.me&#x2F;yourname"><i class="ic i-address-card"></i></span>
</div>

<ul class="menu">
  
    
  <li class="item">
    <a href="/lostyu/" rel="section"><i class="ic i-home"></i>Home</a>
  </li>


</ul>

      </div>
    </div>
  </div>

  <ul id="quick">
    <li class="prev pjax">
        <a href="/lostyu/2020/12/23/zookeeper/" rel="prev" title="Previous Post"><i class="ic i-chevron-left"></i></a>
    </li>
    <li class="up"><i class="ic i-arrow-up"></i></li>
    <li class="down"><i class="ic i-arrow-down"></i></li>
    <li class="next pjax">
        <a href="/lostyu/2020/12/23/io%E6%B5%81%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/" rel="next" title="Next Post"><i class="ic i-chevron-right"></i></a>
    </li>
    <li class="percent"></li>
  </ul>
</div>


        </div>
        <div class="dimmer"></div>
      </div>
    </main>
    <footer id="footer">
      <div class="inner">
        <div class="widgets">
          
<div class="rpost pjax">
  <h2>Random Posts</h2>
  <ul>
      
  <li class="item">
    
<div class="breadcrumb">
</div>

    <span><a href="/lostyu/2020/12/23/Java%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/" title="Java网络编程">Java网络编程</a></span>
  </li>

      
  <li class="item">
    
<div class="breadcrumb">
</div>

    <span><a href="/lostyu/2020/12/23/dubbo/" title="dubbo">dubbo</a></span>
  </li>

      
  <li class="item">
    
<div class="breadcrumb">
</div>

    <span><a href="/lostyu/2020/12/23/io%E6%B5%81%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/" title="io流常用操作..o">io流常用操作..o</a></span>
  </li>

      
  <li class="item">
    
<div class="breadcrumb">
</div>

    <span><a href="/lostyu/2020/12/23/zookeeper/" title="zookeeper">zookeeper</a></span>
  </li>

      
  <li class="item">
    
<div class="breadcrumb">
</div>

    <span><a href="/lostyu/2020/12/23/hello-world/" title="Hello World">Hello World</a></span>
  </li>

  </ul>
</div>
<div>
  <h2>Recent Comments</h2>
  <ul class="leancloud-recent-comment"></ul>
</div>

        </div>
        <div class="status">
  <div class="copyright">
    
    &copy; 2010 – 
    <span itemprop="copyrightYear">2020</span>
    <span class="with-love">
      <i class="ic i-sakura rotate"></i>
    </span>
    <span class="author" itemprop="copyrightHolder">Eden的个人世界 @ 我的金子，只给千寻</span>
  </div>
  <div class="powered-by">
    Powered by <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo</span> & Theme.<span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2FtZWhpbWUvaGV4by10aGVtZS1zaG9rYQ==">Shoka</span>
  </div>
</div>

      </div>
    </footer>
  </div>
<script data-config type="text/javascript">
  var LOCAL = {
    path: '2020/12/23/dubbo/',
    favicon: {
      show: "（●´3｀●）Goooood",
      hide: "(´Д｀)Booooom"
    },
    search : {
      placeholder: "Search for Posts",
      empty: "We didn't find any results for the search: ${query}",
      stats: "${hits} results found in ${time} ms"
    },
    valine: true,fancybox: true,copyright: 'Copied to clipboard successfully! <br> All articles in this blog are licensed under <i class="ic i-creative-commons"></i>BY-NC-SA.',
    ignores : [
      function(uri) {
        return uri.includes('#');
      },
      function(uri) {
        return new RegExp(LOCAL.path+"$").test(uri);
      }
    ]
  };
</script>

<script src="https://cdn.polyfill.io/v2/polyfill.js"></script>

<script src="//cdn.jsdelivr.net/combine/npm/pace-js@1.0.2/pace.min.js,npm/pjax@0.2.8/pjax.min.js,npm/whatwg-fetch@3.4.0/dist/fetch.umd.min.js,npm/animejs@3.2.0/lib/anime.min.js,npm/algoliasearch@4/dist/algoliasearch-lite.umd.js,npm/instantsearch.js@4/dist/instantsearch.production.min.js,npm/lozad@1/dist/lozad.min.js,npm/quicklink@2/dist/quicklink.umd.js"></script>

<script src="/lostyu/js/app.js?v=0.2.5"></script>




</body>
</html>
